головне меню список тем тестування презентації історія створення

 

4.5. Таймери і процесори подій

Більшість задач управління, які реалізуються за допомогою МК, вимагає виконання їх в реальному часі. Під цим розуміється здатність системи одержати інформацію про стан керованого об'єкту, виконати необхідні розрахункові процедури і видати управляючі дії протягом інтервалу часу, достатнього для бажаної зміни стану об'єкту.
Покладати функції формування управління в реальному масштабі часу тільки на центральний процесор неефективно, оскільки це займає ресурси, необхідні для розрахункових процедур. Тому в більшості сучасних МК використовується апаратна підтримка роботи в реальному часі з використанням таймера (таймерів).
Модулі таймерів служать для прийому інформації про час настання тих або інших подій від зовнішніх датчиків подій, а також для формування управляючих дій в часі.
Модуль таймера 8-розрядного МК є 8-м або 16-розрядний лічильник з схемою управління. Схемотехнікою МК звичайно передбачається можливість використовування таймера в режимі лічильника зовнішніх подій, тому його часто називають таймером/лічильником. Структура типового 16-розрядного таймера/лічильника у складі МК приведена на мал. 4.5.




Мал. 4.5. Структура модуля таймера/лічильника.


В пам'яті МК 16-розрядний лічильник відображається двома регістрами: TH  - старший байт лічильника, TL - молодший байт. Регістри доступні для читання і для запису. Напрям рахунку - тільки прямий, тобто під час надходженя вхідних імпульсів вміст лічильника збільшується. Залежно від настройки лічильник може використовувати одне з джерел вхідних сигналів:

  • імпульсну послідовність з виходу керованого дільника частоти fBUS;
  • сигнали зовнішніх подій, що поступають на вхід TOCKI контроллера.

В першому випадку говорять, що лічильник працює в режимі таймера, в другому - в режимі лічильника подій. При переповнюванні лічильника встановлюється в «одиницю» трігер переповнювання TF, який генерує запит на переривання, якщо переривання від таймера дозволені. Пуск і зупинка таймера можуть здійснюватися тільки під управлінням програми. Програмним способом можна також встановити старший і молодший біти лічильника в довільний стан або прочитати поточний код лічильника.
Розглянутий «класичний» модуль таймера/лічильника широко застосовується в різних моделях щодо простих МК. Він може використовуватися для вимірювання тимчасових інтервалів і формування послідовності імпульсів. Основними недоліками «класичного» таймера/лічильника є:

  • втрати часу на виконання команд пуску і зупинки таймера, що приводять до появи помилки при вимірюванні тимчасових інтервалів і обмежуючі мінімальну тривалість вимірюваних інтервалів часу одиницями мс;
  • складнощі при формуванні тимчасових інтервалів (міток часу), відмінних від періоду повного коефіцієнта рахунку, рівного (Kділ/fBUS)*216;
  • неможливість одночасного обслуговування (вимірювання або формування імпульсного сигналу) відразу декількох каналів.

Перші два  недоліки були усунені у вдосконаленому модулі таймера/лічильника, що використовується в МК сімейства MCS-51 (Intel). Додаткова логіка рахункового входу дозволяє тактовим імпульсам поступати на вхід лічильника, якщо рівень сигналу на одній з ліній вводу рівний «1». Таке рішення підвищує точність вимірювання тимчасових інтервалів, оскільки пуск і зупинка таймера проводиться апаратно. Також у вдосконаленому таймері реалізований режим перезавантаження лічильника довільним кодом у момент переповнювання. Це дозволяє формувати тимчасові послідовності з періодом, відмінним від періоду повного коефіцієнта рахунку.
Проте ці удосконалення не усувають головного недоліку модуля «класичного» таймера - одноканального режиму роботи. Вдосконалення підсистеми реального часу МК ведеться по наступних напрямах:

  • збільшення числа модулів таймерів/лічильників. Цей шлях характерний для фірм, випускаючих МК із структурою MCS-51, а також для МК компаній Mitsubishi і Hitachi;
  • модифікація структури модуля таймера/лічильника, при якій збільшення числа каналів досягається не за рахунок збільшення числа лічильників, а за рахунок введення додаткових апаратних засобів вхідного захоплення (input capture - IC) і вихідного порівняння (output compare - ОС). Такий підхід використовується, зокрема, в МК компанії Motorola.

Принцип дії каналу вхідного захоплення таймера/лічильника ілюструє мал. 4.6.
Схема детектора події «спостерігає» за рівнем напруги на одному з входів МК. Частіше всього це одна з ліній порту вводу/виводу. При зміні рівня логічного сигналу з «0» на «1» і навпаки виробляється строб запису, і поточний стан лічильника  таймера записується в 16-розрядний регістр вхідного захоплення. Описану дію в мікропроцесорній техніці називають подією захоплення.



Мал. 4.6. Структурна схема каналу вхідного захоплення таймера.

 Передбачена можливість вибору типу сигналу на вході, і це сприймається як подія:

  • позитивний (передній) фронт сигналу;
  • негативний (задній) фронт сигналу;
  • будь-яка зміна логічного рівня сигналу.

Вибір типу події захоплення встановлюється в процесі ініціалізації таймера і може неодноразово змінюватися в ході виконання програми. Кожна подія захоплення приводить до установки в «1» трігера вхідного захоплення і появі на його виході прапора (ознаки) вхідного захоплення ICF. Стан трігера вхідного захоплення може бути лічений програмно, а якщо переривання по події захоплення дозволені - формується запит на переривання  INT IC.
Використовування режиму вхідного захоплення дозволяє виключити помилки вимірювання вхідного інтервалу часу, зв'язані з часом переходу до підпрограми обробки переривання, оскільки копіювання поточного стану лічильника здійснюється апаратними, а не програмними засобами. Проте час переходу на підпрограму обробки переривання накладає обмеження на тривалість вимірюваного інтервалу часу, оскільки передбачається, що друга подія захоплення відбудеться пізніше, ніж код першої події буде прочитаний МК.
Структура апаратних засобів каналу вихідного порівняння представлена на мал. 4.7.
цифрововий компаратор безперервно порівнює поточний код лічильника  таймера з кодом, який записаний в 16-розрядному регістрі вихідного порівняння. У момент рівності кодів на одному з виходів МК (Pxj на мал. 4.7) встановлюється заданий рівень логічного сигналу. Звичайно передбачено три типи зміни сигналу на виході Pxj у момент події вихідного порівняння:

  • установка високого логічного рівня;
  • установка низького логічного рівня;
  • інвертування сигналу на виході.

При настанні події порівняння встановлюються в «1» трігер вихідного порівняння і відповідну йому ознаку вихідного порівняння OCF. Аналогічно режиму вхідного захоплення стан трігера вихідного порівняння може бути прочитано програмно, а якщо переривання по події порівняння дозволені - формується запит на переривання  INT ОС.
Режим вихідного порівняння призначений, перш за все, для формування тимчасових інтервалів заданої тривалості. Тривалість сформованого тимчасового інтервалу визначається тільки різницею кодів, послідовно завантажуваних в регістр вихідного порівняння, і не залежить від програмного забезпечення МК. Час, необхідний для запису нового значення коду в регістр каналу порівняння, обмежує мінімальну тривалість формованого тимчасового інтервалу.

 



Мал. 4.7. Структурна схема каналу вихідного порівняння таймера.

Модулі вдосконаленого таймера використовуються у складі МК в різних модифікаціях. При цьому число каналів вхідного захоплення і вихідного порівняння в модулі може бути різним. Так, в МК сімейства HC05 фірми Motorola типовими рішеннями є модулі 1IC+1OC або 2IC+2OC, а модуль таймера у складі МК тільки один. У ряді модулів канали можуть бути довільно налаштовані на функцію вхідного захоплення або вихідного порівняння за допомогою ініціалізації. Лічильник модуля вдосконаленого таймера може не мати функції програмної зупинкиу. В цьому випадку стан лічильника не можна синхронізувати з яким-небудь моментом роботи МК, і такий лічильник характеризується як вільно підраховуючий (free counter).
Апаратні засоби вдосконаленого таймера дозволяють вирішити багато задач управління в реальному часі. Проте у міру зростання складності алгоритмів управління виразно виявляються обмеження модулів вдосконаленого таймера, а саме:

  • недостатнє число каналів захоплення і порівняння, що належить одному лічильнику тимчасової бази. Це не дозволяє сформувати синхронізовані між собою багатоканальні імпульсні послідовності;
  • однозначно певна конфігурація каналу (або захоплення або порівняння) часто не задовольняє потребам вирішуваної задачі;
  • формування сигналів по методу широтно-імпульсної модуляції (ШІМ) вимагає програмної підтримки, що знижує максимально досяжну частоту вихідного сигналу.

Тому наступним етапом розвитку модулів підсистеми реального часу МК стали модулі процесорів подій. Вперше модулі процесорів подій були використані компанією Intel в МК сімейства 8xC51Fx. Цей модуль одержав назву програмованого рахункового масиву (Programmable Counter Array - PCA).
РСА забезпечує більш широкі можливості роботи в реальному масштабі часу і у меншій мірі витрачає ресурси центрального процесора, ніж стандартний і вдосконалений таймери/лічильники. До переваг РСА також можна віднести більш просте програмування і більш високу точність. Наприклад, РСА може забезпечити кращу часову роздільну здатність, ніж таймери 0, 1 і 2 МК сімейства MCS-51, оскільки лічильник РСА здатний працювати з тактовою частотою, втричі більшою, ніж у цих таймерів. РСА також може вирішувати багато задач, виконання яких з використанням таймерів вимагає додаткових апаратних витрат (наприклад, визначення фазового зсуву між імпульсами або генерація ШІМ-сигналу). РСА складається з 16-бітового таймера-лічильника і п'яти 16-бітових модулів порівняння, як показано на мал. 4.8.
Таймер-лічильник РСА використовується як базовий таймер для функціонування всіх п'яти модулів порівняння. Вхід таймера-лічильника РСА може бути запрограмований на підрахунок сигналів від наступних джерел:

  • вихід дільника на 12  тактового генератора МК;
  • вихід дільника на 4 тактового генератора МК;
  • сигнал переповнювання таймера 0;
  • зовнішній вхідний сигнал на виведення ЕСI (P1.2).



Мал. 4.8. Структура процесора подій МК сімейства Intel 8xC51Fx.

Будь-який з модулів порівняння може бути запрограмований для роботи в наступних режимах:

  • спрацювання по фронту і/або спаду імпульсу на вході CEXi;
  • програмованого таймера;
  • високошвидкісного виходу;
  • широтно-імпульсного модулятора.

Модуль 4 може бути також запрограмований як сторожовий таймер (Watchdog Timer - WDT).
Режим спрацювання по імпульсу на вході МК еквівалентний режиму вхідного захоплення (IC) вдосконаленого таймера. Режими програмованого таймера і високошвидкісного виходу близькі по своїх функціональних можливостях до режиму вихідного порівняння (ОС).
В режимі ШІМ на відповідному виводі МК формується послідовність імпульсів з періодом, рівним періоду базового таймера/лічильника PCA. Значення 8-розрядного коду, записане в молодший байт регістра відповідного модуля задає скважність формованого сигналу. При зміні коду від 0 до 255 шпаруватість міняється від 100 % до 0,4 %.
Режим ШІМ дуже простий з погляду програмного обслуговування. Якщо зміни скважності не передбачається, то достатньо один раз занести відповідний код в регістр даних модуля, проініціювати режим ШІМ, і імпульсна послідовність відтворюватиметься із заданими параметрами без втручання програми.
Призначення і особливості роботи сторожового таймера будуть розглянуто далі окремо.
При роботі модуля порівняння в режимі защіпки, програмованого таймера або високошвидкісного виходу модуль може сформувати сигнал переривання. Сигнали від всіх п'яти модулів порівняння-защіпки і сигнал переповнювання таймера РСА розділяють один вектор переривання. Іншими словами, якщо переривання дозволені, то і сигнал переповнювання таймера PCA і сигнал від будь-якого з модулів викликають одну і ту ж підпрограму переривань, яка повинна сама ідентифікувати джерело, що викликало її.
Для роботи із зовнішніми пристроями таймер-лічильник РСА і модулі порівняння використовують виводи P1 порту МК. Якщо який-небудь вивід  порту не використовується при роботі РСА, або РСА не задіяний, порт може застосовуватися стандартним чином.
Реалізований в 8xC51FX PCA опинився настільки вдалим, що архітектура даних МК стала промисловим стандартом де-факто, а сам PCA багато разів відтворювався в різних модифікаціях мікроконтролерів різних фірм.

Тенденція розвитку підсистеми реального часу сучасних МК знаходить своє віддзеркалення в збільшенні числа каналів процесорів подій і розширенні їх функціональних можливостей.

 

 

попередня тема наступна тема